const { param } = require("express/lib/request");
const util = require("../util/index");
let io = null;

//全员广播
const update_online_count = () => {
	io.sockets.emit("update_online_count", "当前在线人数：" + io.engine.clientsCount);
};

//给某人发消息
const sendToSomeBody = (toUser, data) => {
	console.log("发送消息");
	try {
		let params = {
			msgId: util.randomId(),
			data: data,
		};
		io.sockets.in(toUser).emit("new_msg", JSON.stringify(params));
	} catch (error) {}
};

//初始化
const init = (server) => {
	io = require("socket.io")(server, { cors: true });

	io.on("connection", (socket) => {
		socket.on("login", function (data) {
			console.log("登陆信息" + data);
			socket.join(data.toString());
			update_online_count();
		});

		socket.on("disconnect", () => {
			console.log("disconnect");
			update_online_count();
		});

		socket.on("chat message", (msg) => {
			console.log("message: " + msg);
		});
		socket.on("message", (msg) => {
			const msgContent = {
				username: msg.mine.username,
				avatar: msg.mine.avatar, //消息来源用户头像
				id: msg.to.id, //消息的来源ID（如果是私聊，则是用户id，如果是群聊，则是群组id）
				type: msg.to.type, //聊天窗口来源类型，从发送消息传递的to里面获取
				content: msg.mine.content, //消息内容
				// ,cid: 0 //消息id，可不传。除非你要对消息进行一些操作（如撤回）
				mine: false, //是否我发送的消息，如果为true，则会显示在右方
				fromid: msg.mine.id, //消息的发送者id（比如群组中的某个消息发送者），可用于自动解决浏览器多窗口时的一些问题
				timestamp: new Date().valueOf(), //服务端时间戳毫秒数。注意：如果你返回的是标准的 unix 时间戳，记得要 *1000
			};
			io.sockets.emit("groupMsg", msgContent);
		});
	});
};

exports.init = init;
exports.io = io;
exports.sendToSomeBody = sendToSomeBody;
